package com.mall.module.product.service;


import com.mall.module.product.domain.dto.BatchOperationDTO;
import com.mall.module.product.domain.dto.ProductCreateDTO;
import com.mall.module.product.domain.dto.ProductSpuDTO;
import com.mall.module.product.domain.dto.ProductSpuPageQueryDTO;
import com.mall.module.product.domain.entity.ProductSpu;
import com.mall.module.product.domain.vo.NewProductVO;
import com.mall.module.product.domain.vo.ProductSpuDetailVO;
import com.mall.module.product.domain.vo.ProductSpuVO;

import java.util.List;

/**
 * 商品SPU服务接口
 */
public interface ProductSpuService {
    /**
     * 新增商品(包含SPU和SKU)
     *
     * @param dto 商品创建DTO
     * @return 新增商品的ID
     */
    Long save(ProductCreateDTO dto);
    
    /**
     * 更新商品SPU信息
     *
     * @param dto 商品SPU DTO
     */
    void update(ProductSpuDTO dto);
    
    /**
     * 获取商品详情
     *
     * @param id 商品ID
     * @return 商品详情VO
     */
    ProductSpuDetailVO getDetail(Long id);
    
    /**
     * 删除商品
     *
     * @param id 商品ID
     * @param operatorId 操作人ID
     */
    void delete(Long id, Long operatorId);
    
    /**
     * 分页查询商品列表
     *
     * @param queryDTO 查询条件
     * @return 商品列表
     */
    List<ProductSpuVO> page(ProductSpuPageQueryDTO queryDTO);
    
    /**
     * 查询商品列表
     *
     * @param condition 查询条件
     * @return 商品列表
     */
    List<ProductSpuVO> list(ProductSpu condition);
    
    /**
     * 根据分类ID查询商品列表
     *
     * @param categoryId 分类ID
     * @return 商品列表
     */
    List<ProductSpuVO> listByCategory(Long categoryId);
    
    /**
     * 根据品牌ID查询商品列表
     *
     * @param brandId 品牌ID
     * @return 商品列表
     */
    List<ProductSpuVO> listByBrand(Long brandId);
    
    /**
     * 更新商品状态
     *
     * @param id 商品ID
     * @param status 状态
     */
    void updateStatus(Long id, Integer status);
    
    /**
     * 批量操作商品
     *
     * @param operationDTO 批量操作DTO
     */
    void batchOperation(BatchOperationDTO operationDTO);
    
    /**
     * 添加商品标签关联
     *
     * @param productId 商品ID
     * @param tagIds 标签ID列表
     */
    void addProductTags(Long productId, List<Long> tagIds);
    
    /**
     * 移除商品标签关联
     *
     * @param productId 商品ID
     * @param tagIds 标签ID列表
     */
    void removeProductTags(Long productId, List<Long> tagIds);
    
    /**
     * 添加商品促销关联
     *
     * @param productId 商品ID
     * @param promotionIds 促销ID列表
     */
    void addProductPromotions(Long productId, List<Long> promotionIds);
    
    /**
     * 移除商品促销关联
     *
     * @param productId 商品ID
     * @param promotionIds 促销ID列表
     */
    void removeProductPromotions(Long productId, List<Long> promotionIds);
    
    /**
     * 获取新品列表
     *
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 新品列表
     */
    List<NewProductVO> listNewProduct(Integer pageNum, Integer pageSize);
}
